//给定字符串列表 strs ，返回其中 最长的特殊序列 的长度。如果最长特殊序列不存在，返回 -1 。 
//
// 特殊序列 定义如下：该序列为某字符串 独有的子序列（即不能是其他字符串的子序列）。 
//
// s 的 子序列可以通过删去字符串 s 中的某些字符实现。 
//
// 
// 例如，"abc" 是 "aebdc" 的子序列，因为您可以删除"aebdc"中的下划线字符来得到 "abc" 。"aebdc"的子序列还包括
//"aebdc"、 "aeb" 和 "" (空字符串)。 
// 
//
// 
//
// 示例 1： 
//
// 
//输入: strs = ["aba","cdc","eae"]
//输出: 3
// 
//
// 示例 2: 
//
// 
//输入: strs = ["aaa","aaa","aa"]
//输出: -1
// 
//
// 
//
// 提示: 
//
// 
// 2 <= strs.length <= 50 
// 1 <= strs[i].length <= 10 
// strs[i] 只包含小写英文字母 
// 
//
// Related Topics 数组 哈希表 双指针 字符串 排序 👍 198 👎 0


package leetcode.editor.cn

import kotlin.math.max

class LongestUncommonSubsequenceIi {
    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        fun findLUSlength(strs: Array<String>): Int {
            var ans = -1
            for (i in strs.indices) {
                if (strs[i].length < ans) continue
                var flag = true
                for (j in strs.indices) {
                    if (i == j || strs[i].length > strs[j].length) continue
                    if (isSubQ(strs[i], strs[j])) {
                        flag = false
                        break
                    }
                }
                if (flag) ans = max(ans, strs[i].length)
            }
            return ans
        }

        private fun isSubQ(str1: String, str2: String): Boolean {
            var idx = 0
            for (c in str1) {
                while (idx < str2.length && str2[idx] != c) {
                    idx++
                }
                if (idx == str2.length) return false
                idx++
            }
            return true
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}

fun main() {
    val s = LongestUncommonSubsequenceIi.Solution()
}